#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
// 数据类型必须是long long类型，不然会溢出
long long getMax(vector<int>& v, int n, int k, int d)
{
	// 状态F(i,j)： 以第i个人为最后一个人，总共选了j个人的最大值
	vector<vector<long long>> maxValue(n + 1, vector<long long>(k + 1, 0));
	vector<vector<long long>> minValue(n + 1, vector<long long>(k + 1, 0));
	// 初始化F(i, 1): 以第i个人为最后一个人，共选了1个人的最大值
	long long ret = 0;
	for (int i = 1; i <= n; ++i)
	{
		maxValue[i][1] = minValue[i][1] = v[i - 1];
	}
	for (int i = 1; i <= n; ++i)
	{
		// 需要选取k个人
		for (int j = 2; j <= k; ++j)
		{
			// 约束条件：i - d <= m <= i - 1, 且不能小于1
			for (int m = i - 1; m >= max(i - d, 1); --m)
			{
				maxValue[i][j] = max(maxValue[i][j], max(maxValue[m][j - 1] * v[i - 1],
					minValue[m][j - 1] * v[i - 1]));
				minValue[i][j] = min(minValue[i][j], min(maxValue[m][j - 1] * v[i - 1],
					minValue[m][j - 1] * v[i - 1]));
			}
		}
		// 更新最大值
		ret = max(ret, maxValue[i][k]);
	}
	return ret;
}
 
int main()
{
	int n, k, d;
	cin >> n;
	vector<int> v(n, 0);
	for (int i = 0; i < n; ++i)
	{
		cin >> v[i];
	}
	cin >> k;
	cin >> d;
	cout << getMax(v, n, k, d);
	return 0;
}